import axios from 'axios'
import qs from 'qs'
import { ElMessage } from 'element-plus'
import router from '@/router'

/**
 * 创建axios实例
 */
const http = axios.create({
  timeout: 10000,  // 10秒超时
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept': 'application/json'
  }
})

/**
 * 请求拦截器
 */
http.interceptors.request.use(config => {
  // 从localStorage获取保存的token
  const token = localStorage.getItem('token')
  
  // 如果token存在，将其添加到请求头的Authorization字段
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }

  // 将POST请求的数据转换为form-urlencoded格式
  if (config.method === 'post' && config.data) {
    config.data = qs.stringify(config.data)
  }
  
  return config
}, error => {
  console.error('请求错误:', error)
  ElMessage.error('请求发送失败')
  return Promise.reject(error)
})

/**
 * 响应拦截器
 */
http.interceptors.response.use(
  response => response,
  error => {
    if (error.response) {
      console.error('响应错误:', error.response.status, error.response.data)
      switch (error.response.status) {
        case 422:
          ElMessage.error('数据验证失败：' + error.response.data)
          break
        case 401:
          ElMessage.error('登录已过期，请重新登录')
          localStorage.removeItem('token')  // 清除过期的token
          router.push('/login')  // 跳转到登录页
          break
        case 403:
          ElMessage.error('权限不足，请检查登录状态')
          router.push('/login')  // 跳转到登录页
          break
        case 404:
          ElMessage.error('请求的资源不存在')
          break
        case 500:
          ElMessage.error('服务器错误，请稍后重试')
          break
        default:
          ElMessage.error('请求失败：' + (error.response.data || '未知错误'))
      }
    } else if (error.request) {
      ElMessage.error('网络错误，无法连接到服务器')
    } else {
      ElMessage.error('请求配置错误：' + error.message)
    }
    return Promise.reject(error)
  }
)

export default http 